package com.jiang.剑指Offer.位运算.NC264;

/**
 * @author Jiang
 * @version 1.0
 * @date 2024/12/29 21:31
 */
public class Solution {
    // 直接运算
//     public double Power(double base, int exponent) {
//         // 对exponent为负数进行处理
//         if (exponent < 0) {
//             base = 1 / base;
//             exponent *= -1;
//         }

//         double res = 1.0;
//         for (int i = 0; i < exponent; i++) {
//             res *= base;
//         }
//         return res;
//   }

    // 分治
    public double Power(double base, int exponent) {
        // 对exponent为负数进行处理
        if (exponent < 0) {
            base = 1 / base;
            exponent *= -1;
        }

        double res = 1.0;
        while(exponent != 0) {
            // 如果exponent为奇数，则res *= base，使其为偶数
            if ((exponent & 1) == 1) {
                res *= base;
            }
            // 对exponent偶数部分进行处理
            base *= base;
            exponent >>= 1;
        }
        return base;
    }
}
